Testing Asynchronous Code এবং Ajax Requests

Web Development - জ্যাসমিনজেএস (JasmineJS)
228

JasmineJS এ Asynchronous Code এবং Ajax Requests এর টেস্টিং কিছুটা আলাদা হতে পারে কারণ এই ধরনের কোড সিঙ্ক্রোনাসভাবে কাজ করে না। সাধারণভাবে, JasmineJS সিঙ্ক্রোনাস টেস্ট কেসগুলো খুব সহজে পরিচালনা করতে পারে, তবে এসিনক্রোনাস কোড বা API কল পরীক্ষা করতে কিছু বিশেষ কৌশল প্রয়োজন। JasmineJS এই ধরনের টেস্টিং সমর্থন করে এবং এর জন্য কিছু ফিচার প্রদান করে যেমন done(), async/await, এবং setTimeout()

এই টিউটোরিয়ালে আমরা দেখব কিভাবে JasmineJS ব্যবহার করে এসিনক্রোনাস কোড এবং Ajax Requests এর টেস্ট তৈরি করা যায়।


JasmineJS এ Asynchronous Code Testing

JasmineJS এ এসিনক্রোনাস কোড টেস্ট করার জন্য সাধারণভাবে done() ফাংশন ব্যবহার করা হয়। done() ফাংশনটি একটি কলব্যাক হিসেবে কাজ করে এবং Jasmine কে জানায় যে টেস্টটি শেষ হয়েছে।

উদাহরণ: done() এর সাথে এসিনক্রোনাস টেস্ট

describe("Asynchronous test", function() {
  it("should wait for the async function to complete", function(done) {
    setTimeout(function() {
      const result = true;
      expect(result).toBe(true);
      done();  // এসিনক্রোনাস কোড শেষ হওয়ার পরে done() কল করা হয়
    }, 1000); // ১ সেকেন্ড পরে টেস্টটি পাস হবে
  });
});

এখানে:

  • setTimeout(): এটি একটি এসিনক্রোনাস কোডের উদাহরণ যা ১ সেকেন্ড পরে একটি কার্যক্রম সম্পন্ন করবে।
  • done(): এটি Jasmine কে জানায় যে টেস্টটি শেষ হয়ে গেছে এবং Jasmine সঠিকভাবে টেস্টটি সম্পন্ন করবে।

JasmineJS এ Async/Await ব্যবহার করা

JasmineJS ES6 async/await এর সমর্থন করে, যা এসিনক্রোনাস কোডকে সিঙ্ক্রোনাস কোডের মতো দেখতে আরও সহজ করে তোলে। এই পদ্ধতিতে done() ফাংশন ব্যবহারের প্রয়োজন নেই।

উদাহরণ: Async/Await এর সাথে এসিনক্রোনাস টেস্ট

describe("Async/Await test", function() {
  it("should resolve the promise correctly", async function() {
    const result = await new Promise((resolve) => {
      setTimeout(() => resolve(true), 1000);
    });
    expect(result).toBe(true);
  });
});

এখানে:

  • async এবং await ব্যবহার করা হয়েছে এসিনক্রোনাস প্রমিজের (Promise) ফলাফল এক্সেস করার জন্য।
  • setTimeout() ১ সেকেন্ড পর প্রমিজটি রেজলভ করবে, এবং Jasmine তখন পরীক্ষা করবে যে এটি true রিটার্ন করেছে।

JasmineJS এ Ajax Requests Testing

JasmineJS এ Ajax রিকোয়েস্ট টেস্ট করার জন্য সাধারণভাবে জাসমিন স্পাই এবং done() ব্যবহার করা হয়, যা এন্ডপয়েন্টে কোনো রিকোয়েস্ট পাঠানোর পর তার ফলাফল পরীক্ষা করতে সাহায্য করে। এখানে আমরা XMLHttpRequest বা fetch() ব্যবহার করে Ajax রিকোয়েস্ট টেস্ট করার পদ্ধতি দেখব।

উদাহরণ: XMLHttpRequest এর মাধ্যমে Ajax Request Testing

describe("AJAX request", function() {
  it("should make an AJAX request and return the expected data", function(done) {
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "https://jsonplaceholder.typicode.com/todos/1", true);
    
    xhr.onload = function() {
      if (xhr.status === 200) {
        const response = JSON.parse(xhr.responseText);
        expect(response.id).toBe(1);
        done(); // টেস্ট সম্পন্ন
      }
    };
    
    xhr.send();
  });
});

এখানে:

  • XMLHttpRequest ব্যবহার করা হয়েছে একটি GET রিকোয়েস্ট পাঠানোর জন্য।
  • onload ইভেন্টে টেস্টটি চালানো হয়েছে যাতে AJAX রিকোয়েস্টের ফলাফল পাওয়া যায়।
  • done() ব্যবহার করা হয়েছে Jasmine কে জানাতে যে টেস্টটি শেষ হয়েছে।

উদাহরণ: fetch() API এর মাধ্যমে Ajax Request Testing

fetch() API ব্যবহার করে AJAX রিকোয়েস্ট টেস্ট করার পদ্ধতি:

describe("AJAX request with fetch", function() {
  it("should fetch data from API and check response", async function() {
    const response = await fetch("https://jsonplaceholder.typicode.com/todos/1");
    const data = await response.json();
    expect(data.id).toBe(1);
  });
});

এখানে:

  • fetch() API ব্যবহার করা হয়েছে, যা একটি Promise রিটার্ন করে।
  • await ব্যবহার করা হয়েছে প্রমিজের ফলাফল পাওয়ার জন্য।

JasmineJS এর স্পাই এবং অ্যাসিনক্রোনাস টেস্টিং

JasmineJS এ আপনি স্পাই ব্যবহার করে কোনো ফাংশন বা মেথডের আচরণ পরীক্ষা করতে পারেন, যেমন যে কোনো API কল বা ফাংশন অ্যাসিনক্রোনাসভাবে কাজ করছে কিনা।

উদাহরণ: স্পাই ব্যবহার করে Ajax Request Testing

describe("AJAX Request using Jasmine Spy", function() {
  it("should make an AJAX request and verify the function call", function(done) {
    const spy = jasmine.createSpy("ajaxCall");

    spy();  // স্পাই ফাংশন কল

    setTimeout(function() {
      expect(spy).toHaveBeenCalled();
      done();
    }, 1000);
  });
});

এখানে:

  • jasmine.createSpy() ব্যবহার করে একটি স্পাই ফাংশন তৈরি করা হয়েছে।
  • toHaveBeenCalled() ব্যবহার করে যাচাই করা হয়েছে যে স্পাই ফাংশনটি কল হয়েছে কিনা।

সারাংশ

JasmineJS এ Asynchronous Code এবং Ajax Requests টেস্ট করা কিছুটা ভিন্ন প্রক্রিয়া হতে পারে কারণ এসিনক্রোনাস কোডের ফলাফল আসতে সময় লাগে। তবে JasmineJS এর done(), async/await এবং স্পাই এর মাধ্যমে আপনি সহজেই এসিনক্রোনাস কোড এবং AJAX রিকোয়েস্ট টেস্ট করতে পারেন। এখানে মূল পদ্ধতিগুলো:

  • done(): এসিনক্রোনাস কোডের সাথে কাজ করার জন্য কলব্যাক ফাংশন।
  • async/await: Promise ভিত্তিক কোডের জন্য সহজ ও পরিষ্কার টেস্টিং পদ্ধতি।
  • Ajax Request Testing: XMLHttpRequest বা fetch() API ব্যবহার করে AJAX রিকোয়েস্ট টেস্ট করা।

এভাবে আপনি JasmineJS এর মাধ্যমে এসিনক্রোনাস কোড এবং API কলের কার্যকারিতা পরীক্ষা করতে পারবেন।

Content added By

Asynchronous Code এর জন্য done() এর ব্যবহার

227

JasmineJS সাধারণত সিঙ্ক্রোনাস টেস্টিং ফ্রেমওয়ার্ক হিসেবে কাজ করে, তবে অনেক সময় আপনি asynchronous code যেমন API কল, টাইমার, অথবা ডেটাবেজ অপারেশন পরীক্ষা করতে চাইলে এর জন্য done() ফাংশন ব্যবহার করতে হয়। done() ব্যবহৃত হয় Jasmine কে জানাতে যে একটি asynchronous টেস্ট কেস শেষ হয়েছে এবং Jasmine তার ফলাফল রিপোর্ট করতে পারে।


Asynchronous Test Cases

Asynchronous কোডে, টেস্ট কেসগুলি সিঙ্ক্রোনাস কোডের মতো সরাসরি রান হয় না। এ ক্ষেত্রে, JasmineJS কে সঠিক সময়ে টেস্টের ফলাফল জানাতে done() কল করতে হয়, যাতে Jasmine জানে কখন টেস্টের কার্যক্রম শেষ হয়েছে।


done() ফাংশন ব্যবহার

JasmineJS এ, আপনি যখন একটি asynchronous কাজ করেন (যেমন API কল, ডেটাবেজ অপারেশন, বা টাইমার), তখন আপনি done() ব্যবহার করতে পারেন। এটি একটি callback ফাংশন হিসেবে কাজ করে যা আপনাকে টেস্ট শেষ হওয়ার সংকেত দেয়।

done() এর কাঠামো:

it("should complete async operation", function(done) {
  // আপনার asynchronous কোড এখানে থাকবে
  someAsyncOperation(function() {
    // এই callback ফাংশনের মধ্যে done() কল করতে হবে
    done(); 
  });
});
  • done(): এটি Jasmine কে জানায় যে asynchronous টেস্টটি শেষ হয়েছে এবং Jasmine ফলাফল পরীক্ষা করতে পারে।

done() ব্যবহার করার উদাহরণ

ধরা যাক, আপনি একটি API কলের টেস্ট করতে চান যা ২ সেকেন্ডে একটি রেসপন্স পাঠায়। Jasmine এর asynchronous টেস্টে done() ব্যবহার করা যেতে পারে।

উদাহরণ:

describe("API Call", function() {
  it("should fetch user data correctly", function(done) {
    const fakeApiCall = function(callback) {
      setTimeout(function() {
        callback({ id: 1, name: "John Doe" });
      }, 2000);
    };

    fakeApiCall(function(response) {
      expect(response.id).toBe(1);
      expect(response.name).toBe("John Doe");
      done();  // Asynchronous কোডের শেষে done() কল করা হচ্ছে
    });
  });
});

এখানে:

  • fakeApiCall(): একটি সাধারণ asynchronous ফাংশন, যা ২ সেকেন্ড পরে একটি callback ফাংশন কল করে।
  • done(): done() কল করা হয়েছে টেস্টের শেষে, যা Jasmine কে জানায় যে asynchronous কার্যক্রম সম্পন্ন হয়েছে।

Error Handling এবং done.fail()

যদি asynchronous কোডে কোনো সমস্যা হয় এবং আপনি তা handle করতে চান, তাহলে done.fail() ব্যবহার করতে পারেন। এটি Jasmine কে জানায় যে টেস্টটি ব্যর্থ হয়েছে এবং টেস্ট ফলাফল হিসেবে একটি error দেখাবে।

done.fail() এর উদাহরণ:

describe("API Call with Error", function() {
  it("should fail when API returns an error", function(done) {
    const fakeApiCall = function(callback) {
      setTimeout(function() {
        callback(new Error("API Error"));
      }, 2000);
    };

    fakeApiCall(function(response) {
      // এটি শুধুমাত্র success case জন্য
    }, function(error) {
      expect(error.message).toBe("API Error");
      done.fail(error);  // যদি error হয়, done.fail() কল হবে
    });
  });
});

এখানে:

  • done.fail(error): asynchronous কোডে কোনো error ঘটলে, আমরা done.fail(error) কল করছি, যাতে Jasmine জানে যে টেস্টটি ব্যর্থ হয়েছে এবং এটি একটি error রিপোর্ট করবে।

Promise এর সাথে done() ব্যবহার

JasmineJS এ আপনি যদি Promise ব্যবহার করেন, তবে done() কল করার দরকার নেই। JasmineJS স্বাভাবিকভাবে Promise রিটার্ন করা asynchronous কোডে অপেক্ষা করে এবং Promise resolve হওয়ার পর টেস্ট চালায়।

উদাহরণ:

describe("Promise-based API Call", function() {
  it("should fetch user data correctly", function() {
    const fakeApiCall = function() {
      return new Promise(function(resolve, reject) {
        setTimeout(function() {
          resolve({ id: 1, name: "John Doe" });
        }, 2000);
      });
    };

    return fakeApiCall().then(function(response) {
      expect(response.id).toBe(1);
      expect(response.name).toBe("John Doe");
    });
  });
});

এখানে:

  • Promise: fakeApiCall() একটি Promise রিটার্ন করছে। JasmineJS Promise এর then() ফাংশন থেকে সরাসরি ফলাফল গ্রহণ করবে, এবং আপনি done() কল করার প্রয়োজন নেই।

done() এবং asynchronous কোডের টেস্ট

JasmineJS asynchronous টেস্টিংয়ের জন্য done() ব্যবহার করার সময়, আপনাকে নিশ্চিত করতে হবে যে:

  • done() কল না করলে Jasmine টেস্টটি কখনো শেষ হবে না এবং এটি timeout error দিবে।
  • done.fail() ব্যবহার করে asynchronous টেস্টে error handling করতে হবে।

সারাংশ

  • done(): JasmineJS এ asynchronous কোডের জন্য ব্যবহৃত একটি callback ফাংশন, যা Jasmine কে জানায় যে টেস্ট সম্পন্ন হয়েছে।
  • done.fail(): এটি ব্যবহার করা হয় error handling-এর জন্য, যাতে Jasmine জানে যে টেস্টটি ব্যর্থ হয়েছে।
  • Promise: JasmineJS Promise রিটার্ন করা asynchronous কোডের সাথে স্বয়ংক্রিয়ভাবে কাজ করে এবং done() কল করার দরকার হয় না।
  • Asynchronous testing: JasmineJS asynchronous টেস্টিংয়ের জন্য সঠিক ব্যবস্থাপনা প্রদান করে, যেখানে আপনি done() কল করে Jasmine কে কার্যক্রমের শেষের সংকেত দিতে পারেন।

JasmineJS এর asynchronous টেস্টিং সুবিধা ব্যবহার করে আপনি টাইম-ডিপেনডেন্ট বা ইভেন্ট-ড্রিভেন কার্যক্রমের উপর নির্ভরশীল কোড সহজেই পরীক্ষা করতে পারবেন।

Content added By

Ajax Requests টেস্ট করার জন্য Spies ব্যবহার করা

175

JasmineJS-এ Ajax requests পরীক্ষা করার জন্য spies ব্যবহার করা খুবই কার্যকরী পদ্ধতি। সাধারণত, Ajax request সাধারণত বাহ্যিক সার্ভিসে ডেটা পাঠায় বা ডেটা গ্রহণ করে, এবং এই ধরনের টেস্টকে সঠিকভাবে পরিচালনা করার জন্য ফাংশনের আচরণ নিরীক্ষণ করা (স্পাই করা) প্রয়োজন। JasmineJS-এর spyOn() ফাংশনটি এই কাজের জন্য খুবই উপযুক্ত, যা Ajax request কে mock বা spy করতে সহায়তা করে।

Ajax request টেস্ট করার জন্য, আপনি XMLHttpRequest বা fetch API কে স্পাই করতে পারেন, এবং স্পাই করার মাধ্যমে আমরা নিশ্চিত করতে পারি যে নির্দিষ্ট ফাংশনটি ঠিকভাবে কল হচ্ছে এবং প্রত্যাশিত আউটপুট বা কার্যকারিতা দিচ্ছে।


Ajax Request টেস্ট করার জন্য Spies ব্যবহার করা

JasmineJS-এ Ajax request পরীক্ষা করার জন্য, আপনি সাধারণত যেভাবে স্পাই ব্যবহার করবেন তা হলো:

  1. spyOn() দিয়ে Ajax কলের ফাংশন স্পাই করা।
  2. and.callFake() ব্যবহার করে Ajax কলের আচরণ মক (mock) বা পরিবর্তন করা।
  3. done() ব্যবহার করে asynchronous কোডের জন্য টেস্ট শেষ হওয়ার সিগন্যাল দেওয়া।

উদাহরণ: XMLHttpRequest স্পাই করে Ajax Request টেস্ট করা

ধরা যাক, আমাদের একটি ফাংশন রয়েছে, যেটি একটি Ajax request পাঠায় এবং কিছু ডেটা গ্রহণ করে।

Ajax Request পাঠানোর ফাংশন

function fetchUserData(userId, callback) {
  const xhr = new XMLHttpRequest();
  xhr.open("GET", `/api/user/${userId}`, true);
  
  xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
      callback(JSON.parse(xhr.responseText));
    }
  };
  
  xhr.send();
}

এই fetchUserData ফাংশনটি একটি GET Ajax request পাঠায় /api/user/{userId} URL-এ এবং সার্ভার থেকে প্রাপ্ত ডেটা কলব্যাক ফাংশনে পাঠায়।

Ajax Request স্পাই করা JasmineJS-এ

JasmineJS-এ spyOn() ব্যবহার করে XMLHttpRequest এর open() এবং send() মেথডকে স্পাই করতে পারি। এতে করে আমরা Ajax request-এর আচরণ পরীক্ষা করতে পারব।

describe("fetchUserData function", function() {
  let xhr;

  beforeEach(function() {
    // XMLHttpRequest স্পাই করা
    xhr = jasmine.createSpyObj("XMLHttpRequest", ["open", "send", "setRequestHeader"]);
    
    // XMLHttpRequest এর ইনস্ট্যান্স মক করা
    window.XMLHttpRequest = jasmine.createSpy().and.returnValue(xhr);
  });

  it("should send a GET request to the correct URL", function(done) {
    // টেস্টের জন্য কলব্যাক ফাংশন ব্যবহার করা
    const userId = 1;
    const mockCallback = jasmine.createSpy("callback");

    fetchUserData(userId, mockCallback);

    // স্পাই করা open() মেথডটি ঠিকভাবে কল হয়েছে কিনা চেক করা
    expect(xhr.open).toHaveBeenCalledWith("GET", `/api/user/${userId}`, true);
    expect(xhr.send).toHaveBeenCalled(); // send() মেথড কল হয়েছে কিনা চেক করা

    // Ajax এর মধ্যে callback ফাংশনটিকে কল করার জন্য ফেক রেসপন্স দেওয়া
    xhr.onreadystatechange();
    xhr.status = 200;
    xhr.responseText = JSON.stringify({ id: 1, name: "John Doe" });
    xhr.onreadystatechange();

    // Callback ফাংশনটি সঠিকভাবে কল হয়েছে কিনা চেক করা
    expect(mockCallback).toHaveBeenCalledWith({ id: 1, name: "John Doe" });

    done(); // asynchronous টেস্টের জন্য done() কল করা
  });
});

এখানে:

  1. jasmine.createSpyObj() দিয়ে একটি মক XMLHttpRequest অবজেক্ট তৈরি করা হয়েছে।
  2. open() এবং send() মেথডগুলোকে স্পাই করা হয়েছে।
  3. window.XMLHttpRequest কে মক করে, ফেক XMLHttpRequest ব্যবহার করা হয়েছে।
  4. xhr.onreadystatechange() কল করে, আমরা AJAX রেসপন্সের মতো আচরণ তৈরি করেছি এবং টেস্টে চেক করেছি যে কলব্যাক ফাংশনটি সঠিকভাবে কল হয়েছে কিনা।

উদাহরণ: fetch() স্পাই করে Ajax Request টেস্ট করা

যদি আপনি fetch API ব্যবহার করেন, তাহলে তার জন্যও একইভাবে স্পাই করতে পারবেন।

Ajax Request পাঠানোর ফাংশন (fetch ব্যবহার করে)

function fetchUserData(userId) {
  return fetch(`/api/user/${userId}`)
    .then(response => response.json())
    .then(data => data);
}

JasmineJS-এ fetch স্পাই করা

describe("fetchUserData function", function() {

  beforeEach(function() {
    // Jasmine এর স্পাই ব্যবহার করে fetch() ফাংশন স্পাই করা
    spyOn(window, "fetch").and.returnValue(Promise.resolve({
      json: () => Promise.resolve({ id: 1, name: "John Doe" })
    }));
  });

  it("should fetch user data correctly", function(done) {
    const userId = 1;

    fetchUserData(userId).then(data => {
      expect(data).toEqual({ id: 1, name: "John Doe" });
      expect(fetch).toHaveBeenCalledWith(`/api/user/${userId}`);
      done();
    });
  });
});

এখানে:

  1. spyOn(window, "fetch") দিয়ে fetch() ফাংশনকে স্পাই করা হয়েছে এবং আমরা একটি মক রেসপন্স প্রদান করেছি যা Promise ফেরত দেয়।
  2. fetchUserData() কল করার পর, টেস্টে চেক করা হয়েছে যে fetch() সঠিক URL-এ কল হয়েছে এবং ফাংশনটি সঠিক ডেটা ফেরত দিয়েছে।

সারাংশ

  • JasmineJS-এ Ajax request টেস্ট করার জন্য spyOn() ব্যবহার করা হয়, যাতে আপনি HTTP রিকুয়েস্টের আচরণ স্পাই করতে পারেন।
  • XMLHttpRequest বা fetch API-এর মতো বাহ্যিক সার্ভিসের কলগুলো মক বা স্পাই করা যায়, যাতে আপনি বাহ্যিক সার্ভিসের উপর নির্ভর না করে টেস্টগুলো নির্বিঘ্নে চালাতে পারেন।
  • and.callFake() বা and.returnValue() ব্যবহার করে আপনি স্পাই করা ফাংশনের আচরণ পরিবর্তন করতে পারেন এবং মক রেসপন্স তৈরি করতে পারেন।
  • done() ব্যবহার করে asynchronous টেস্টে ফলাফল পাওয়ার পর টেস্ট শেষ হওয়া নিশ্চিত করা হয়।

এই পদ্ধতিগুলো আপনাকে Ajax রিকুয়েস্টের জন্য JasmineJS-এ কার্যকরী এবং নির্ভরযোগ্য টেস্ট তৈরি করতে সাহায্য করবে।

Content added By

HTTP Requests এর জন্য Fake Responses তৈরি করা

200

JasmineJS এ যখন আপনি HTTP requests পরীক্ষা করেন, তখন সত্যিকারের HTTP request পাঠানো এবং তার প্রতিক্রিয়া (response) পাওয়ার বদলে আপনি Fake Responses তৈরি করতে পারেন। এটি টেস্টিং প্রক্রিয়াকে দ্রুত, নির্ভরযোগ্য এবং বিচ্ছিন্ন (isolated) করে তোলে, কারণ আপনি আসল সার্ভারের ওপর নির্ভর না করে সিমুলেটেড প্রতিক্রিয়া ব্যবহার করতে পারবেন। JasmineJS এ Spies এবং Mocking এর মাধ্যমে Fake HTTP Responses তৈরি করা যেতে পারে।


Fake HTTP Responses এর প্রয়োজনীয়তা

টেস্টিংয়ের সময় HTTP requests এর জন্য আসল সার্ভার ব্যবহার করলে কিছু সমস্যা হতে পারে:

  • ধীরগতির প্রতিক্রিয়া: বাস্তব HTTP requests অনেক সময় নিতে পারে।
  • নেটওয়ার্ক সমস্যা: নেটওয়ার্ক ইস্যুর কারণে টেস্ট ব্যর্থ হতে পারে।
  • অপ্রত্যাশিত ফলাফল: সার্ভার থেকে আসল ডেটা পরিবর্তিত হতে পারে, যা টেস্টের ফলাফলে প্রভাব ফেলতে পারে।

এজন্য JasmineJS তে Fake HTTP Responses ব্যবহার করা হয়, যা নির্দিষ্ট ডেটা প্রদান করে এবং সার্ভার বা নেটওয়ার্ক পরিস্থিতির ওপর নির্ভরশীলতা কমিয়ে আনে।


JasmineJS এ Fake Responses তৈরি করা

JasmineJS এ Fake HTTP Responses তৈরি করতে মূলত Spies এবং jasmine.Ajax এর মতো টুলস ব্যবহার করা হয়। Jasmine এর jasmine-ajax প্লাগইন ব্যবহার করলে আপনি HTTP requests এবং তাদের responses মক করতে পারেন।

১. jasmine-ajax ইনস্টলেশন

প্রথমে আপনাকে jasmine-ajax প্লাগইনটি ইনস্টল করতে হবে, যা Jasmine এর মাধ্যমে AJAX টেস্টিংকে সহজ করে তোলে।

npm এর মাধ্যমে ইনস্টল করতে পারেন:

npm install jasmine-ajax --save-dev

এটি আপনার package.json ফাইলে ডিপেনডেন্সি হিসেবে যুক্ত হবে।

২. Jasmine Ajax কনফিগারেশন

আপনি beforeEach() বা beforeAll() মেথডে jasmine.Ajax.install() কল করতে পারেন, যাতে Jasmine AJAX প্লাগইন ইনস্টল হয় এবং পরে jasmine.Ajax.uninstall() দিয়ে প্লাগইনটি আনইনস্টল করতে পারেন।

beforeEach(function() {
  jasmine.Ajax.install();  // jasmine-ajax ইনস্টল করা
});

afterEach(function() {
  jasmine.Ajax.uninstall();  // jasmine-ajax আনইনস্টল করা
});

Fake HTTP Response তৈরি করা

একবার Jasmine Ajax প্লাগইন ইনস্টল হলে, আপনি সহজেই Fake HTTP Response তৈরি করতে পারবেন। এখানে jasmine.Ajax.requests.mostRecent() ব্যবহার করে সবার সর্বশেষ HTTP request পেতে পারবেন এবং তার প্রতিক্রিয়া (response) সিমুলেট করতে পারবেন।

উদাহরণ:

ধরা যাক, আমাদের একটি ফাংশন আছে যা HTTP GET request পাঠায় এবং সার্ভার থেকে ডেটা নিয়ে আসে। আমরা এটির জন্য Fake Response তৈরি করব।

describe("Fake HTTP Responses with jasmine-ajax", function() {
  let xhr;

  beforeEach(function() {
    jasmine.Ajax.install();  // jasmine-ajax ইনস্টল করা
  });

  afterEach(function() {
    jasmine.Ajax.uninstall();  // jasmine-ajax আনইনস্টল করা
  });

  it("should return a fake response from the server", function() {
    const successCallback = jasmine.createSpy("successCallback");
    
    // HTTP GET request করা
    const xhr = new XMLHttpRequest();
    xhr.open("GET", "/api/data", true);
    xhr.onload = function() {
      successCallback(xhr.responseText);
    };
    xhr.send();

    // Fake response তৈরি করা
    const request = jasmine.Ajax.requests.mostRecent();
    request.respondWith({
      status: 200,
      responseText: '{"data": "This is a fake response"}'
    });

    // টেস্ট যাচাই
    expect(successCallback).toHaveBeenCalledWith('{"data": "This is a fake response"}');
  });
});

এখানে:

  • jasmine.Ajax.requests.mostRecent(): এটি সর্বশেষ HTTP request টিকে রিটার্ন করে।
  • request.respondWith(): এটি Fake Response তৈরি করে। আপনি এখানে status code, responseText বা অন্যান্য HTTP প্রোপার্টি নির্ধারণ করতে পারেন।

Fake POST Request এর জন্য Fake Response

এটি একটি POST request এর জন্যও কার্যকর। ধরা যাক, আমরা একটি POST request পাঠাতে চাই, যেখানে JSON ডেটা পাঠানো হচ্ছে।

describe("Fake POST Request with jasmine-ajax", function() {
  let xhr;

  beforeEach(function() {
    jasmine.Ajax.install();
  });

  afterEach(function() {
    jasmine.Ajax.uninstall();
  });

  it("should return a fake response for a POST request", function() {
    const postData = { name: "John", age: 30 };
    const successCallback = jasmine.createSpy("successCallback");

    // HTTP POST request পাঠানো
    const xhr = new XMLHttpRequest();
    xhr.open("POST", "/api/user", true);
    xhr.setRequestHeader("Content-Type", "application/json");
    xhr.onload = function() {
      successCallback(xhr.responseText);
    };
    xhr.send(JSON.stringify(postData));

    // Fake response তৈরি করা
    const request = jasmine.Ajax.requests.mostRecent();
    request.respondWith({
      status: 201,
      responseText: '{"message": "User created successfully"}'
    });

    // টেস্ট যাচাই
    expect(successCallback).toHaveBeenCalledWith('{"message": "User created successfully"}');
  });
});

এখানে:

  • xhr.send(JSON.stringify(postData)): JSON ডেটা পোস্ট করা হচ্ছে।
  • request.respondWith(): POST request এর জন্য Fake response তৈরি করা হচ্ছে।

Fake Responses এর বিভিন্ন বৈশিষ্ট্য

Jasmine-ajax এর মাধ্যমে আপনি বিভিন্ন ধরনের Fake Response তৈরি করতে পারেন:

  • status: HTTP স্ট্যাটাস কোড (যেমন 200, 404, 500) নির্ধারণ করতে পারেন।
  • responseText: সার্ভারের কাছ থেকে প্রাপ্ত ডেটা (যেমন JSON বা plain text) নির্ধারণ করতে পারেন।
  • headers: আপনি প্রয়োজন অনুসারে custom HTTP headers ব্যবহার করতে পারেন।
  • timeout: আপনি request এর timeout কনফিগার করতে পারেন।
request.respondWith({
  status: 404,
  statusText: "Not Found",
  responseText: '{"error": "Not found"}',
  responseHeaders: { "Content-Type": "application/json" }
});

সারাংশ

JasmineJS এ Fake HTTP Responses তৈরি করার মাধ্যমে আপনি HTTP requests এর কার্যকারিতা এবং প্রতিক্রিয়া সহজেই মক করতে পারেন, যা টেস্টিং প্রক্রিয়াকে দ্রুত এবং নির্ভরযোগ্য করে তোলে। jasmine-ajax প্লাগইন ব্যবহার করে আপনি HTTP requests সিমুলেট করতে পারেন এবং প্রয়োজনীয় Fake Responses তৈরি করতে পারেন। এটি টেস্টিংয়ের সময় আসল সার্ভার বা নেটওয়ার্ক সমস্যার প্রভাব কমিয়ে আনে, ফলে টেস্ট কেসগুলো আরও সঠিকভাবে এবং দ্রুত সম্পন্ন হয়।

Content added By

Asynchronous Callback Functions এর টেস্টিং

214

JasmineJS এ Asynchronous Callback Functions (অ্যাসিঙ্ক্রোনাস কলেব্যাক ফাংশন) এর টেস্টিং করতে হলে আপনাকে কিছু বিশেষ পদ্ধতি অনুসরণ করতে হবে, কারণ অ্যাসিঙ্ক্রোনাস কোড সাধারণত টেস্ট কেসের ফাইনাল আউটপুট পাওয়ার আগে চলতে থাকে। JasmineJS এ অ্যাসিঙ্ক্রোনাস টেস্টের জন্য নির্দিষ্ট সুবিধা রয়েছে, যা আপনাকে অ্যাসিঙ্ক্রোনাস ফাংশন বা কলব্যাকের সাথে কাজ করার সময় সঠিকভাবে পরীক্ষা করতে সাহায্য করে।


Asynchronous Code টেস্ট করার প্রয়োজনীয়তা

অ্যাসিঙ্ক্রোনাস ফাংশনগুলির মধ্যে সাধারণত setTimeout(), setInterval(), বা প্রমিস (Promise) ব্যবহৃত হয়। এই ফাংশনগুলির মধ্যে কোনো একটি কাজ সম্পন্ন হওয়ার জন্য কিছু সময় লাগতে পারে, তাই আপনি যদি সঠিকভাবে টেস্ট করতে চান, তবে আপনাকে অ্যাসিঙ্ক্রোনাস কাজটির সম্পূর্ণ হওয়ার পর টেস্টের ফলাফল নিশ্চিত করতে হবে।

JasmineJS এ অ্যাসিঙ্ক্রোনাস কোডের টেস্টিং সাধারণত দুটি উপায় অনুসরণ করা হয়:

  1. done Callback ব্যবহার: এটি সরাসরি Jasmine এর টেস্ট কেসের মধ্যে একটি কলব্যাক ফাংশন হিসেবে ব্যবহৃত হয়।
  2. async এবং await ব্যবহার: এটি প্রমিস (Promise) ভিত্তিক টেস্টিংয়ের জন্য ব্যবহৃত হয়।

done Callback এর মাধ্যমে Asynchronous Testing

JasmineJS এ done একটি বিশেষ ফাংশন যা আপনি টেস্ট কেসে অ্যাসিঙ্ক্রোনাস কাজ সম্পন্ন হওয়ার পরে টেস্টটি শেষ করার জন্য ব্যবহার করেন। done ফাংশন টেস্টের অ্যাসিঙ্ক্রোনাস কার্যকলাপ শেষ হওয়ার পরে টেস্ট কেসটি পাস বা ফেইল করতে সহায়তা করে।

done Callback ব্যবহার করার উদাহরণ:

describe("Asynchronous Test with done callback", function() {
  it("should test an asynchronous function", function(done) {
    setTimeout(function() {
      const result = 2 + 3;
      expect(result).toBe(5);  // অ্যাসিঙ্ক্রোনাস কাজের পর টেস্ট
      done();  // done কল করে টেস্ট শেষ করা হবে
    }, 1000);  // 1 সেকেন্ড পরে কাজটি সম্পন্ন হবে
  });
});

এখানে:

  • done(): setTimeout() এর শেষে done() কল করা হয়েছে যাতে Jasmine জানে যে অ্যাসিঙ্ক্রোনাস কাজটি সম্পন্ন হয়েছে।
  • Jasmine অ্যাসিঙ্ক্রোনাস কোডের জন্য অপেক্ষা করবে যতক্ষণ না done() কল করা হয়।

Promises ব্যবহার করে Asynchronous Testing

JasmineJS এর সর্বশেষ সংস্করণে আপনি async এবং await ব্যবহার করতে পারেন প্রমিস ভিত্তিক অ্যাসিঙ্ক্রোনাস ফাংশন টেস্ট করার জন্য। এটি আরো আধুনিক এবং পরিষ্কার পদ্ধতি।

Promise এর মাধ্যমে Asynchronous Testing এর উদাহরণ:

describe("Asynchronous Test with Promises", function() {
  it("should test a promise", function() {
    return new Promise(function(resolve, reject) {
      setTimeout(function() {
        const result = 2 + 3;
        resolve(result);  // প্রমিসের মাধ্যমে ফলাফল ফেরত দেওয়া হবে
      }, 1000);
    }).then(function(result) {
      expect(result).toBe(5);  // প্রমিস শেষ হলে টেস্ট
    });
  });
});

এখানে:

  • Promise: setTimeout এর মাধ্যমে একটি প্রমিস তৈরি করা হয়েছে।
  • then(): প্রমিসের সম্পূর্ণ হওয়ার পরে .then() ব্যবহার করে ফলাফল যাচাই করা হয়েছে।

async এবং await ব্যবহার করে Asynchronous Testing

JasmineJS এ async এবং await ব্যবহার করে প্রমিস ভিত্তিক অ্যাসিঙ্ক্রোনাস টেস্টিং আরো পরিষ্কার এবং কার্যকরী হতে পারে।

async এবং await এর মাধ্যমে Asynchronous Testing এর উদাহরণ:

describe("Asynchronous Test with async/await", function() {
  it("should test an async function", async function() {
    const result = await new Promise(function(resolve) {
      setTimeout(function() {
        resolve(2 + 3);
      }, 1000);
    });

    expect(result).toBe(5);  // await ব্যবহার করে প্রমিসের ফলাফল যাচাই
  });
});

এখানে:

  • async: it() ব্লকটি অ্যাসিঙ্ক্রোনাস ফাংশন হিসেবে চিহ্নিত করা হয়েছে।
  • await: এটি প্রমিসের ফলাফল পাওয়ার জন্য ব্যবহৃত হয়েছে এবং এর পরবর্তী কোডটি প্রমিস সম্পন্ন হওয়ার পরে চালানো হয়।

সারাংশ

  • Asynchronous Testing: অ্যাসিঙ্ক্রোনাস ফাংশন বা কোডের কার্যকারিতা পরীক্ষা করার জন্য JasmineJS এ কিছু বিশেষ পদ্ধতি রয়েছে, যেমন done কলব্যাক এবং async/await ব্যবহার।
  • done Callback: এটি অ্যাসিঙ্ক্রোনাস কোড সম্পন্ন হওয়ার পর টেস্ট কেস শেষ করতে ব্যবহৃত হয়।
  • async এবং await: এই পদ্ধতি প্রমিস ভিত্তিক অ্যাসিঙ্ক্রোনাস টেস্টিং করার একটি আধুনিক এবং পরিষ্কার পদ্ধতি।

এই পদ্ধতিগুলির মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস কোডের সঠিকভাবে টেস্টিং করতে পারবেন এবং JasmineJS টেস্টের কার্যকারিতা বাড়াতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...